\section{7. Patterns 4: Model-View-Controller og Model-View-ViewModel}

\begin{center}
\line(1,0){500}
\end{center}

\begin{itemize}
\item Redegør for, hvad et software design pattern er. 
\item Redegør for Model-View-Control mønstret og dets variationer. 
\item Redegør for Model-View-ViewModel mønstret.
\end{itemize}
\begin{center}
\line(1,0){500}
\end{center}

\subsubsection{Hvad er et SW Design Pattern}
\subsubsection{MVC + Variationer}
\includegraphics[scale=0.6]{7-mvc}
\includegraphics[scale=0.4]{7-mvp}
\begin{itemize}
    \item MVC
    \begin{itemize}
            \item Model-lag
            \begin{itemize}
                \item Datastruktur
            \end{itemize}
            \item View-lag
            \begin{itemize}
                \item Brugerinteraktion
                \item Kan have direkte adgang til Model-laget
            \end{itemize}
            \item Controller-lag
            \begin{itemize}
                \item Oversætter mellem Model og View
            \end{itemize}
        \end{itemize}    
    \item MVP
    \begin{itemize}
        \item Model-lag
        \begin{itemize}
            \item Bliver ultimativt en ren domænemodel
        \end{itemize}        
        \item View-lag
        \begin{itemize}
            \item Brugerinteraktion            
            \item Kun adgang til Presenter
        \end{itemize}
        \item Presenter-lag
        \begin{itemize}
            \item Indeholder al applikations logik
            \item Modtager events fra View-laget
        \end{itemize}
    \end{itemize}
    \item Nemmere at teste uden View implementeret
\end{itemize}
\subsubsection{MVVM}
\begin{itemize}
	\item Microsofts specialisering af MVP
    \item Benytter sig af databinding
    \item View kender kun til sin ViewModel igennem ViewModelLocator
    \item Codebehind er tom
    \item Properties, NotifyPropertyChanged
    \item ObservableCollection
    \item Minimere kode som GUI designere skal skrive\\
    \includegraphics[scale=1]{7-mvvm}
\end{itemize}